#include "../Symboltable/LexemStorage.h"
#include <UnitTest++.h>

SUITE(LexemStorageTests) {
	TEST(Constructor) {
		LexemStorage l(1024);
	}

	TEST(SmallAllocation) {
		LexemStorage l(1024);
		char* m = l.malloc(3);
		CHECK(m != NULL);
	}

	TEST(AllocationSameAsDefaultSize) {
		int defaultSize = 1024;
		LexemStorage l(defaultSize);
		char* m = l.malloc(defaultSize);
		CHECK(m != NULL);
	}

	TEST(AllocationLargerThanDefaultSize) {
		int defaultSize = 1024;
		LexemStorage l(defaultSize);
		char* m = l.malloc(defaultSize + 1);
		CHECK(m != NULL);
	}

	TEST(AllocationLargerThanDoubleDefaultSize) {
		int defaultSize = 1024;
		LexemStorage l(defaultSize);
		char* m = l.malloc(defaultSize * 2 + 1);
		CHECK(m != NULL);
	}

	TEST(OverwriteBehavior) {
		LexemStorage l(1024);
		char *m = l.malloc(3);
		m[3] = 'x';
		CHECK(l.malloc(1)[0] == 'x');
	}

	TEST(MultipleAllocations) {
		LexemStorage l(1024);
		for(int i = 0; i < 200; i++) {
			l.malloc(1024);
		}
	}
}
